Schema First
GraphQL ServerのCode frist→ Schema first→ Code firstの遍歴
よくあるフロー
Schemaを記述する
GraphQL Codegenなどのlibraryを使って、schemaからresolverの型定義を生成
resolverの型定義に従って、serverのAPIを実装
clientを実装
pros
Schemaをserver/clientの共通言語にできる
IRみたいな感じねmrsekut.icon
serverとclientが直接依存せず、interfaceに依存して実装する感じにできる
だから、独立に実装を進められる
テストもしやすい
特定のframeworkに依存しない
どういう意味 #??
code firstだと依存するの?
https://speakerdeck.com/haco/code-first-vs-schema-first?slide=8
実装言語に縛られない
Schema Directivesが使える
cons
ここに書いてあるのは、
個々の問題は、それぞれtoolを使えば解決できる
しかし、そうするとtoolの数が膨大になって辛い、という流れ
Schemaとresolverの実装がズレないように保つのが大変
初期は良いが、Scheamが大きくなってくると辛い
Schemaを1つのfileに書かないといけないのでmodule化しづらい
Schema Definition Language (SDL)の能力がしょぼいと辛い
再利用性が低い
そもそも手書きで書くのが大変
IDEのサポートがしょぼいと、DXが悪い
必ずしも最適なコードを生成できない
SDLに対して、複数のプログラミング言語の生成ができるからか
Schemaのversion管理が大変
client/severがそれに追従しないといけない
フロー自体がそもそも煩雑
https://blog.anatoo.jp/2021-03-31
例
GraphQL Codegen
TypeScript
qglgen
Go
The Problems of "Schema-First" GraphQL Server Development | Prisma
Schema Firstの問題点
問題点を5つ挙げ、それぞれを解決するtoolを示す
toolを使えば解決できるけど、結果的に周辺toolが増えすぎて辛いよね
だからCode Firstやってみると良いんじゃない?
という流れ
/graphql-ruby-ja/Schema-Driven Development